版权声明:本文为博主原创文章,转载请注明出处:http://blog.jerkybible.com/2015/05/11/Spring 使用简单Demo进行源码调试(三)/
访问原文「Spring 使用简单Demo进行源码调试(三)」
接上篇日志Spring 使用简单Demo进行源码调试(二)继续。
上篇提到了主要的初始化函数refresh,函数源码如下:
先把prepareRefresh的代码贴出来。这段代码主要功能是初始化
这块基本是数据准备功能, 目前这一块没有实际用到。
接着我们看比较重要的一步
先展开obtainFreshBeanFactory函数
我们主要看refreshBeanFactory()这一步,分为以下步骤:
1. 如果有bean factory,删除之;
2. 新建一个bean factory;
3. 设置一个序列化Id;
4. 使用的上下文自定义内部bean factory;
5. 加载bean 定义
现在看一下第5步,加载bean定义,其实现如下。可以看到,这一步将beanFactory传入XmlBeanDefinitionReader的构造函数,新建一个XmlBeanDefinitionReader对象,然后对其环境进行设置。其中Environment表示当前应用程序运行的环境接口;ResourceLoader表示加载资源策略接口;EntityResolver表示实体解析接口。最后初始化XmlBeanDefinitionReader对象,然后使用这个对象加载bean 定义。
再看下一步,这个方法比较好理解,就是使用已有的配置资源或者配置文件进行加载,当前没有配置资源,所以只使用配置文件进行加载。
来看reader.loadBeanDefinitions(configLocations);这一步。这一步看起来很复杂,但最主要的还是loadBeanDefinitions(resources)这一步。
下一回展开loadBeanDefinitions(resources)。